Apache Ivy একটি শক্তিশালী ডিপেনডেন্সি ম্যানেজমেন্ট টুল যা Java প্রজেক্টে লাইব্রেরি এবং ডিপেনডেন্সি ম্যানেজমেন্টের কাজ সহজ করে তোলে। Ivy Module Descriptor ফাইলটি একটি কনফিগারেশন ফাইল যা একটি প্রজেক্ট বা মডিউলের জন্য ডিপেনডেন্সি এবং অন্যান্য মেটাডেটা সংজ্ঞায়িত করে। এই ফাইলটি Ivy এর কার্যক্রমের মূল অংশ এবং এটি Ivy কে নির্দেশ দেয় যে কোন ডিপেনডেন্সি ব্যবহার করতে হবে এবং কিভাবে ডিপেনডেন্সি রেজলভ করতে হবে।
Ivy Module Descriptor ফাইলটি ivy.xml
নামে পরিচিত, এবং এটি XML ফরম্যাটে লেখা হয়। এটি একটি নির্দিষ্ট মডিউলের (যেমন, একটি লাইব্রেরি বা প্রজেক্ট) জন্য প্রয়োজনীয় ডিপেনডেন্সি এবং অন্যান্য সম্পর্কিত তথ্য সংরক্ষণ করে।
Ivy Module Descriptor ফাইল (যা ivy.xml
নামে পরিচিত) হল একটি কনফিগারেশন ফাইল যা আপনার প্রজেক্ট বা লাইব্রেরির ডিপেনডেন্সি এবং অন্যান্য বৈশিষ্ট্য উল্লেখ করে। Ivy এই ফাইলটি ব্যবহার করে নির্ধারণ করে:
ivy.xml
ফাইলের সাধারণ গঠনটি XML ফরম্যাটে থাকে, যেখানে ডিপেনডেন্সি, সংস্করণ এবং অন্যান্য মেটাডেটা উল্লেখ করা হয়।
<ivy-module version="2.0">
<!-- Information about the module -->
<info organisation="com.example" module="my-app" revision="1.0.0"/>
<!-- Dependencies for this module -->
<dependencies>
<!-- A direct dependency on Spring Core -->
<dependency org="org.springframework" name="spring-core" rev="5.2.0.RELEASE" conf="compile"/>
<!-- A direct dependency on JUnit for testing -->
<dependency org="junit" name="junit" rev="4.12" conf="test"/>
</dependencies>
<!-- Configuration for the module -->
<configurations>
<conf name="compile" description="Compile-time dependencies"/>
<conf name="runtime" description="Runtime dependencies"/>
<conf name="test" description="Test-time dependencies"/>
</configurations>
</ivy-module>
<info>
: এখানে প্রজেক্টের মেটাডেটা (যেমন organisation, module name, এবং revision বা সংস্করণ) উল্লেখ করা হয়েছে।<dependencies>
: এই ট্যাগের মধ্যে নির্দিষ্ট করা ডিপেনডেন্সি গুলি উল্লেখ করা হয়। এখানে spring-core
এবং junit
ডিপেনডেন্সি উল্লেখ করা হয়েছে।<configurations>
: এখানে বিভিন্ন কনফিগারেশন (যেমন compile, runtime, এবং test) নির্ধারণ করা হয়েছে, যা ডিপেনডেন্সির স্কোপ নিয়ন্ত্রণ করে।<info>
: মডিউল সম্পর্কিত মেটাডেটা (যেমন গোষ্ঠী, মডিউল নাম এবং সংস্করণ) নির্ধারণ করে।organisation
: মডিউল বা লাইব্রেরির প্রতিষ্ঠানের নাম।module
: মডিউলের নাম।revision
: সংস্করণ বা রিভিশন নাম্বার।<dependencies>
: এই সেকশনে প্রোজেক্টের সমস্ত ডিপেনডেন্সি উল্লেখ করা হয়। প্রতিটি ডিপেনডেন্সির জন্য:org
: ডিপেনডেন্সির গোষ্ঠী (যেমন, org.springframework
)।name
: ডিপেনডেন্সির নাম (যেমন, spring-core
)।rev
: ডিপেনডেন্সির সংস্করণ (যেমন, 5.2.0.RELEASE
)।conf
: ডিপেনডেন্সির কনফিগারেশন স্কোপ (যেমন, compile
, runtime
, test
)।<configurations>
: এখানে ডিপেনডেন্সির স্কোপ গুলি সংজ্ঞায়িত করা হয়, যাতে আপনি জানতে পারেন কোন ডিপেনডেন্সি কবে এবং কোথায় ব্যবহৃত হবে। উদাহরণস্বরূপ:compile
: কোড কম্পাইল করার জন্য প্রয়োজনীয় ডিপেনডেন্সি।runtime
: অ্যাপ্লিকেশন চালানোর জন্য প্রয়োজনীয় ডিপেনডেন্সি।test
: টেস্টিংয়ের জন্য প্রয়োজনীয় ডিপেনডেন্সি।Ivy স্বয়ংক্রিয়ভাবে ট্রান্সিটিভ ডিপেনডেন্সি (অর্থাৎ, ডিপেনডেন্সির ডিপেনডেন্সি) রেজলভ এবং ম্যানেজ করে। যদি কোনো ডিপেনডেন্সি অন্য কোনো ডিপেনডেন্সির উপর নির্ভরশীল হয়, Ivy সেটি স্বয়ংক্রিয়ভাবে রেজলভ করে।
<ivy-module version="2.0">
<info organisation="com.example" module="my-app" revision="1.0.0"/>
<dependencies>
<!-- A direct dependency with transitive dependencies -->
<dependency org="org.apache.commons" name="commons-lang3" rev="3.12.0"/>
</dependencies>
</ivy-module>
commons-lang3
ডিপেনডেন্সি সরাসরি উল্লেখ করা হয়েছে, এবং Ivy স্বয়ংক্রিয়ভাবে তার ট্রান্সিটিভ ডিপেনডেন্সিগুলি রেজলভ করবে (যেমন, অন্য লাইব্রেরি যা commons-lang3
এর জন্য প্রয়োজনীয় হতে পারে)।ivy.xml
ফাইলটি প্রজেক্টের অংশ হিসেবে সংরক্ষণ করা হয় এবং এটি আপনার ডিপেনডেন্সি ব্যবস্থাপনার জন্য একটি একক রেফারেন্স হিসেবে কাজ করে।ivy.xml
ফাইলের মধ্যে উল্লেখ করা ডিপেনডেন্সি রেজলভ করতে ব্যবহৃত হয়।Ivy Module Descriptor ফাইল (ivy.xml
) হল একটি অত্যন্ত গুরুত্বপূর্ণ কনফিগারেশন ফাইল যা Ivy এর কার্যক্রম পরিচালনা করে। এই ফাইলে ডিপেনডেন্সি, কনফিগারেশন, এবং মডিউল সম্পর্কিত তথ্য সংজ্ঞায়িত থাকে, যা Ivy টুলের মাধ্যমে সহজে ডিপেনডেন্সি রেজলভেশন এবং ম্যানেজমেন্ট করতে সহায়তা করে। Ivy Module Descriptor ফাইলটি ব্যবহার করে আপনি আপনার প্রজেক্টের লাইব্রেরি এবং ডিপেনডেন্সির সংস্করণ এবং স্কোপ কাস্টমাইজ করতে পারেন এবং প্রয়োজনীয় ডিপেনডেন্সি দ্রুত রেজলভ করতে পারেন।
অ্যাপাচি আইভি (Apache Ivy) একটি শক্তিশালী ডিপেন্ডেন্সি ম্যানেজমেন্ট টুল যা প্রধানত জাভা প্রকল্পে লাইব্রেরি এবং ডিপেন্ডেন্সি ম্যানেজমেন্টের জন্য ব্যবহৃত হয়। Module Descriptor বা ivy.xml ফাইল হচ্ছে আইভির ডিপেন্ডেন্সি এবং মডিউল সম্পর্কিত কনফিগারেশন ফাইল, যা প্রকল্পের ডিপেন্ডেন্সি, ভার্সন, রিপোজিটরি এবং অন্যান্য তথ্য সংরক্ষণ করে।
আইভির module descriptor ফাইলটি মূলত XML ফরম্যাটে লেখা হয় এবং এটি প্রকল্পের ডিপেন্ডেন্সি ম্যানেজমেন্টের ভিত্তি হিসেবে কাজ করে। এই ফাইলটির মধ্যে আপনি প্রকল্পের নাম, গোষ্ঠী (organization), সংস্করণ, এবং প্রকল্পের জন্য প্রয়োজনীয় ডিপেন্ডেন্সি গুলি উল্লেখ করেন।
এখানে ivy.xml ফাইলের মূল কাঠামো এবং উপাদানগুলো ব্যাখ্যা করা হলো:
<ivy-module version="2.0">
<info organisation="com.example" module="myapp" revision="1.0"/>
<!-- Repositories where dependencies will be searched -->
<repositories>
<repository name="central" url="https://repo.maven.apache.org/maven2"/>
</repositories>
<!-- Dependencies for the project -->
<dependencies>
<dependency org="org.apache.commons" name="commons-lang3" rev="3.9"/>
</dependencies>
</ivy-module>
এখানে:
এই ট্যাগটি একটি আইভি মডিউল ডেসক্রিপ্টরের মূল ট্যাগ। এটি পুরো ফাইলের কাঠামো এবং সংস্করণ নির্ধারণ করে।
<ivy-module version="2.0">
ট্যাগটি মডিউলের মৌলিক তথ্য ধারণ করে, যেমন গোষ্ঠী (organisation), মডিউল নাম (module), এবং সংস্করণ (revision)। এটি আইভি মডিউল ডেসক্রিপ্টরের শুরুতে থাকে।
<info organisation="com.example" module="myapp" revision="1.0"/>
ট্যাগটি সেই রিপোজিটরি সমূহ নির্ধারণ করে, যেখান থেকে ডিপেন্ডেন্সি সংগ্রহ করা হবে। এটি সাধারণত Maven Central বা Ivy Repository হতে পারে।
<repositories>
<repository name="central" url="https://repo.maven.apache.org/maven2"/>
</repositories>
এই ট্যাগটি প্রকল্পের জন্য নির্দিষ্ট ডিপেন্ডেন্সিগুলি সংজ্ঞায়িত করে। প্রতিটি ট্যাগের মধ্যে লাইব্রেরির গোষ্ঠী (organization), নাম (name), এবং সংস্করণ (revision) থাকে।
<dependencies>
<dependency org="org.apache.commons" name="commons-lang3" rev="3.9"/>
</dependencies>
এটি লাইব্রেরি বা মডিউল এর বিভিন্ন আউটপুট ফাইল যেমন JAR, WAR, অথবা EAR ফাইল সংজ্ঞায়িত করে। সাধারণত এটি মডিউলগুলির উৎপাদন আউটপুট ফাইলগুলি সংরক্ষণ এবং পরিচালনা করতে ব্যবহৃত হয়।
<artifacts>
<artifact name="myapp" type="jar" ext="jar"/>
</artifacts>
এখানে:
এই ট্যাগটি ডিপেন্ডেন্সির কনফিগারেশন বা স্কোপ সেট করতে ব্যবহৃত হয়। এর মাধ্যমে আপনি নির্দিষ্ট করে দিতে পারেন কোন ডিপেন্ডেন্সি কোন কনফিগারেশনে ব্যবহৃত হবে।
<configurations>
<configuration name="compile"/>
</configurations>
এখানে:
এই ট্যাগটি একটি কেন্দ্রীয় স্থান থেকে ডিপেন্ডেন্সি ম্যানেজমেন্ট প্রদান করে, যা ডিপেন্ডেন্সি রেজোলিউশনে সাহায্য করে এবং কনফ্লিক্ট রেজোলিউশন করে।
<dependencyManagement>
<dependencies>
<dependency org="org.springframework" name="spring-core" rev="5.2.4.RELEASE"/>
</dependencies>
</dependencyManagement>
এখানে:
Module Descriptor (ivy.xml) ফাইল অ্যাপাচি আইভির মূল কাঠামো, যা আপনার প্রকল্পের ডিপেন্ডেন্সি এবং মডিউল সম্পর্কিত তথ্য সংরক্ষণ করে। এই ফাইলে আপনি , , , , , এবং ট্যাগ ব্যবহার করে ডিপেন্ডেন্সি এবং রিপোজিটরি সংক্রান্ত কনফিগারেশন পরিচালনা করতে পারেন। এটি আইভির ডিপেন্ডেন্সি রেজোলিউশন প্রক্রিয়া স্বয়ংক্রিয়ভাবে পরিচালনা করতে সহায়তা করে এবং আপনার প্রোজেক্টের ডিপেন্ডেন্সি ম্যানেজমেন্ট সহজ করে তোলে।
অ্যাপাচি আইভি (Apache Ivy) একটি ডিপেনডেন্সি ম্যানেজমেন্ট টুল, যা ডিপেনডেন্সি রেজল্যুশন এবং ম্যানেজমেন্টকে সহজ করে তোলে। Module ID এবং Publications হল অ্যাপাচি আইভি’র দুটি গুরুত্বপূর্ণ ধারণা যা মডিউল এবং ডিপেনডেন্সি সম্পর্কিত তথ্য নির্ধারণ করে।
Module ID আইভির মধ্যে একটি মডিউল বা লাইব্রেরি নির্ধারণ করতে ব্যবহৃত হয়। এটি মূলত তিনটি অংশে বিভক্ত:
এটি মূলত একটি মডিউলকে ইউনিকভাবে চিহ্নিত করতে ব্যবহৃত হয় এবং ডিপেনডেন্সি রেজল্যুশনের জন্য আইভি এই তথ্য ব্যবহার করে ডিপেনডেন্সি খুঁজে বের করে।
ধরা যাক, আপনার প্রোজেক্টে একটি মডিউল রয়েছে যার নাম library
এবং এটি com.example
প্রতিষ্ঠানের অন্তর্গত, সংস্করণ 1.0
:
<ivy-module version="2.0">
<info organisation="com.example" module="library"/>
<dependencies>
<dependency org="com.example" name="library" rev="1.0"/>
</dependencies>
</ivy-module>
এখানে:
com.example
(প্রতিষ্ঠানের নাম)library
(মডিউল বা লাইব্রেরির নাম)1.0
(মডিউল বা লাইব্রেরির সংস্করণ)এই Module ID আইভি-কে জানাতে সাহায্য করে কোন লাইব্রেরি বা মডিউল ব্যবহার করা হচ্ছে।
Publications হল আইভি মডিউল বা লাইব্রেরি প্রকাশের তথ্য যা জানায় কিভাবে একটি মডিউল ব্যবহারকারীকে সরবরাহ করা হবে। সাধারণত, Publications আইভি রেপোজিটরিতে (লোকাল বা রিমোট) প্রকাশিত মডিউলের আর্কাইভ ফাইলগুলির জন্য ব্যবহৃত হয়।
প্রচলিত প্রকাশের ধরনগুলি হল:
আইভি সাধারণত ivy.xml
ফাইলের মধ্যে মডিউল সম্পর্কিত ডিপেনডেন্সি, আর্কাইভ প্যাটার্ন, এবং প্রকাশের তথ্য সংরক্ষণ করে।
<ivy-module version="2.0">
<info organisation="com.example" module="library" revision="1.0"/>
<publications>
<artifact name="library" type="jar" ext="jar"/>
<artifact name="library-sources" type="jar" ext="jar" classifier="sources"/>
<artifact name="library-javadoc" type="jar" ext="jar" classifier="javadoc"/>
</publications>
</ivy-module>
এখানে:
library
: মডিউলটি একটি jar
আর্কাইভ ফাইল হিসেবে প্রকাশিত হবে।library-sources
: মডিউলটির সোর্স কোড sources
ক্লাসিফায়ারসহ একটি jar
ফাইল হিসেবে প্রকাশিত হবে।library-javadoc
: মডিউলটির javadoc
ডকুমেন্টেশন একটি jar
ফাইল হিসেবে প্রকাশিত হবে।Module ID এবং Publications এর সঠিক ব্যবহারের মাধ্যমে অ্যাপাচি আইভি ডিপেনডেন্সি ম্যানেজমেন্ট এবং রেজল্যুশন প্রক্রিয়াটি কার্যকরী এবং সুবিধাজনক হয়ে ওঠে। এগুলি ব্যবহার করে আপনি:
type
: প্রকাশের ধরন (যেমন jar
, war
, pom
, ইত্যাদি)।ext
: ফাইল এক্সটেনশন (যেমন .jar
, .tar
, ইত্যাদি)।classifier
: কোনো অতিরিক্ত প্রকাশের ধরনের জন্য (যেমন সোর্স বা জাভাডক)। উদাহরণ: sources
, javadoc
।<ivy-module version="2.0">
<info organisation="com.example" module="library" revision="1.0"/>
<publications>
<artifact name="library" type="jar" ext="jar"/>
<artifact name="library" type="pom" ext="pom"/>
<artifact name="library-sources" type="jar" ext="jar" classifier="sources"/>
</publications>
</ivy-module>
এখানে:
jar
এবং pom
ফাইল আকারে প্রকাশিত হবে।sources
ক্লাসিফায়ার দিয়ে আলাদা করা হয়েছে।jar
, pom
, সোর্স কোড, জাভাডক)।অ্যাপাচি আইভি (Apache Ivy) একটি ওপেন সোর্স ডিপেনডেন্সি ম্যানেজমেন্ট টুল, যা Java প্রোজেক্টে ব্যবহৃত লাইব্রেরি এবং ডিপেনডেন্সি রেজলভেশনকে সহজ করে তোলে। আইভি কনফিগারেশন এবং ডিপেনডেন্সি ডিফাইন করার মাধ্যমে আপনি আপনার প্রোজেক্টের জন্য প্রয়োজনীয় লাইব্রেরি বা ডিপেনডেন্সি নির্ধারণ করতে পারেন, যা প্রোজেক্টের বিল্ড প্রক্রিয়া স্বয়ংক্রিয়ভাবে পরিচালনা করবে।
এখানে আমরা আইভির Configuration এবং Dependency কিভাবে ডিফাইন করতে হয় তা আলোচনা করব।
আইভিতে Configuration ডিপেনডেন্সির নির্দিষ্ট সেটকে প্রতিনিধিত্ব করে, যা আলাদা আলাদা কনফিগারেশন বা পরিবেশের জন্য প্রযোজ্য হতে পারে। কনফিগারেশন ডিফাইন করার মাধ্যমে আপনি নির্দিষ্ট ডিপেনডেন্সি গ্রুপ বা লাইব্রেরি একটি নির্দিষ্ট কনফিগারেশনে অন্তর্ভুক্ত করতে পারেন।
আইভি সাধারণত দুই ধরনের কনফিগারেশন ডিফাইন করতে ব্যবহার হয়:
compile
: এটি সেই লাইব্রেরিগুলো ধারণ করে যেগুলি কম্পাইলেশন প্রক্রিয়ার সময় প্রয়োজন।runtime
: এটি সেই লাইব্রেরিগুলো ধারণ করে যেগুলি প্রোগ্রাম চালানোর সময় প্রয়োজন।<ivy-module version="2.0">
<info organisation="com.example" module="my-project" revision="1.0.0"/>
<configurations>
<conf name="compile" description="Dependencies for compiling the code"/>
<conf name="runtime" description="Dependencies for runtime"/>
</configurations>
<dependencies>
<dependency org="org.apache.commons" name="commons-lang3" rev="3.10" conf="compile"/>
<dependency org="org.slf4j" name="slf4j-api" rev="1.7.30" conf="runtime"/>
</dependencies>
</ivy-module>
এখানে:
compile
কনফিগারেশনটি কম্পাইলিংয়ের জন্য commons-lang3
লাইব্রেরি অন্তর্ভুক্ত করেছে।runtime
কনফিগারেশনটি slf4j-api
লাইব্রেরি অন্তর্ভুক্ত করেছে যা রuntime এ প্রয়োজন।এইভাবে, আপনি আপনার প্রোজেক্টে বিভিন্ন কনফিগারেশনে আলাদা আলাদা ডিপেনডেন্সি ব্যবহার করতে পারেন।
আইভি ব্যবহারের মূল কাজ হলো ডিপেনডেন্সি রেজলভেশন। Dependency হল সেই লাইব্রেরি বা প্যাকেজ যা আপনার প্রোজেক্টে কাজ করার জন্য প্রয়োজন। আইভিতে, আপনি ডিপেনডেন্সি ডিফাইন করার মাধ্যমে অন্য লাইব্রেরি বা ফাইলগুলো আপনার প্রোজেক্টে যুক্ত করতে পারেন।
ডিপেনডেন্সি ডিফাইন করতে সাধারণত তিনটি প্রধান উপাদান ব্যবহৃত হয়:
org
: লাইব্রেরির অর্গানাইজেশন বা গ্রুপ।name
: লাইব্রেরির নাম।rev
: লাইব্রেরির সংস্করণ।<ivy-module version="2.0">
<info organisation="com.example" module="my-project" revision="1.0.0"/>
<dependencies>
<dependency org="org.apache.commons" name="commons-lang3" rev="3.10"/>
<dependency org="org.slf4j" name="slf4j-api" rev="1.7.30"/>
</dependencies>
</ivy-module>
এখানে:
commons-lang3
লাইব্রেরির 3.10
সংস্করণ এবং slf4j-api
লাইব্রেরির 1.7.30
সংস্করণ ডিপেনডেন্সি হিসেবে ব্যবহার করা হয়েছে।এইভাবে, আপনি আপনার প্রোজেক্টের জন্য যে ডিপেনডেন্সি বা লাইব্রেরি প্রয়োজন, তা ডিফাইন করতে পারেন।
আইভিতে আপনি একাধিক ডিপেনডেন্সি একসাথে ডিফাইন করতে পারেন, এবং প্রয়োজনে কিছু নির্দিষ্ট ডিপেনডেন্সি বাদ (exclude) দিতে পারেন।
<ivy-module version="2.0">
<info organisation="com.example" module="my-project" revision="1.0.0"/>
<dependencies>
<dependency org="org.apache.commons" name="commons-lang3" rev="3.10"/>
<dependency org="org.apache.commons" name="commons-logging" rev="1.2">
<exclude org="org.slf4j" name="slf4j-api"/>
</dependency>
</dependencies>
</ivy-module>
এখানে:
commons-lang3
এবং commons-logging
লাইব্রেরি দুটি ডিপেনডেন্সি হিসেবে ব্যবহার করা হয়েছে।commons-logging
লাইব্রেরি থেকে slf4j-api
এক্সক্লুড করা হয়েছে, যাতে এটি ডিপেনডেন্সি গ্রাফে অন্তর্ভুক্ত না হয়।আইভি আপনার ডিপেনডেন্সি গ্রাফে থাকা ট্রান্সিটিভ ডিপেনডেন্সি (অর্থাৎ ডিপেনডেন্সির ডিপেনডেন্সি) রেজলভ করতেও সক্ষম। আপনি যদি একটি লাইব্রেরি ব্যবহার করেন যা অন্য লাইব্রেরির উপর নির্ভরশীল, তবে আইভি সেই লাইব্রেরিগুলোও ডাউনলোড করবে।
<ivy-module version="2.0">
<info organisation="com.example" module="my-project" revision="1.0.0"/>
<dependencies>
<dependency org="org.apache.commons" name="commons-lang3" rev="3.10"/>
<dependency org="org.springframework" name="spring-core" rev="5.3.8"/>
</dependencies>
</ivy-module>
এখানে, spring-core
লাইব্রেরির মধ্যে থাকা অন্যান্য ডিপেনডেন্সি (যেমন spring-beans
, spring-context
ইত্যাদি) স্বয়ংক্রিয়ভাবে রেজলভ হবে।
আইভি রেঞ্জ নির্ধারণ করার মাধ্যমে আপনি কোনো ডিপেনডেন্সির একটি নির্দিষ্ট রেঞ্জ (যেমন 3.x থেকে 4.x) নির্বাচন করতে পারেন। এটি লাইব্রেরির সংস্করণ চয়েসে নমনীয়তা প্রদান করে।
<ivy-module version="2.0">
<info organisation="com.example" module="my-project" revision="1.0.0"/>
<dependencies>
<dependency org="org.apache.commons" name="commons-lang3" rev="[3.0,4.0)"/>
</dependencies>
</ivy-module>
এখানে:
commons-lang3
লাইব্রেরির সংস্করণ 3.0 থেকে 4.0 এর মধ্যে কোনো সংস্করণ ব্যবহৃত হবে, তবে 4.0 ইনক্লুড হবে না।অ্যাপাচি আইভি (Apache Ivy) একটি শক্তিশালী ডিপেনডেন্সি ম্যানেজমেন্ট টুল যা আপনার প্রোজেক্টে লাইব্রেরি এবং ডিপেনডেন্সি রেজলভেশন এবং কনফিগারেশন সহজ করে তোলে। আপনি Configuration এবং Dependency ডিফাইন করে আপনার প্রোজেক্টে প্রয়োজনীয় লাইব্রেরি ও তাদের সংস্করণ নির্ধারণ করতে পারেন। এর মাধ্যমে আপনার প্রোজেক্টের ডিপেনডেন্সি গ্রাফ উন্নত এবং ম্যানেজ করা সহজ হয়ে যায়।
Apache Ivy একটি ডিপেনডেন্সি ম্যানেজমেন্ট টুল যা আপনার প্রোজেক্টের ডিপেনডেন্সি রেজোলিউশন এবং লাইব্রেরি ব্যবস্থাপনা সহজ করে তোলে। Ivy আপনাকে চেইনড মডিউল ডেসক্রিপ্টর (Chained Module Descriptors) ব্যবহার করার সুবিধা প্রদান করে, যা আপনার প্রোজেক্টের ডিপেনডেন্সি ম্যানেজমেন্ট আরও নমনীয় এবং কাস্টমাইজেবল করে তোলে।
চেইনড মডিউল ডেসক্রিপ্টর (Chained Module Descriptors) Ivy এর একটি বৈশিষ্ট্য যা বিভিন্ন মডিউল ডেসক্রিপ্টর ফাইলকে একত্রে ব্যবহার করতে সহায়তা করে। এতে আপনি একাধিক ivy.xml
ফাইলকে একসাথে যুক্ত করতে পারেন, যার মাধ্যমে একটি প্রোজেক্টের জন্য প্রয়োজনীয় ডিপেনডেন্সি ম্যানেজমেন্ট আরও সহজ ও কেন্দ্রীয়কৃত হয়ে ওঠে।
এই নিবন্ধে আমরা Chained Module Descriptors এর ব্যবহার এবং কিভাবে এটি আপনার ডিপেনডেন্সি ম্যানেজমেন্টকে আরও কার্যকরী করে তোলার জন্য কনফিগার করা হয়, তা আলোচনা করবো।
Chained Module Descriptor হল একটি Ivy ফিচার যা আপনাকে একাধিক ivy.xml ফাইলকে একত্রে যুক্ত করে একসাথে ব্যবহার করতে দেয়। Ivy-তে সাধারণত একটি ivy.xml
ফাইল থাকে যা আপনার প্রোজেক্টের ডিপেনডেন্সি সংজ্ঞায়িত করে। তবে যখন আপনার প্রোজেক্টে একাধিক সাব-মডিউল থাকে, তখন প্রতিটি সাব-মডিউলের জন্য আলাদা ivy.xml
ফাইল থাকতে পারে। Chained Module Descriptor ব্যবহারের মাধ্যমে আপনি এই সব আলাদা মডিউল ডেসক্রিপ্টরগুলোকে একটি জায়গায় একত্রিত করতে পারেন এবং একটি কেন্দ্রীয় ডিপেনডেন্সি ম্যানেজমেন্ট পদ্ধতি তৈরি করতে পারেন।
Chained Module Descriptors ব্যবহার করার জন্য, আপনাকে ivysettings.xml
ফাইলে চেইনড মডিউল ডেসক্রিপ্টর কনফিগার করতে হবে। এটি অন্য ivy.xml ফাইলের রেফারেন্স প্রদান করে যা মূল মডিউলের সাথে সংযুক্ত থাকবে।
<ivysettings>
<module-metadata>
<chain>
<file ref="ivy-base.xml"/>
<file ref="ivy-submodule.xml"/>
</chain>
</module-metadata>
</ivysettings>
এখানে:
<chain>
: এটি চেইনড মডিউল ডেসক্রিপ্টরের ব্লক যেখানে আপনি একাধিক ivy.xml ফাইলকে যুক্ত করেন।<file ref="ivy-base.xml"/>
: এটি মূল ivy.xml
ফাইলের রেফারেন্স।<file ref="ivy-submodule.xml"/>
: এটি সাব-মডিউল বা অন্যান্য মডিউল ফাইলের রেফারেন্স।এই কনফিগারেশনটি একাধিক ivy.xml ফাইলকে একত্রে ব্যবহার করে কেন্দ্রীয়ভাবে ডিপেনডেন্সি রেজোলিউশন পরিচালনা করবে।
Chained Module Descriptor ব্যবহারের মাধ্যমে Ivy একাধিক মডিউল ডেসক্রিপ্টরকে একত্রিত করে ডিপেনডেন্সি রেজোলিউশন পরিচালনা করতে পারে। এটি মূলত ivy.xml
ফাইলের মধ্যে ডিপেনডেন্সি নির্ধারণ করে এবং একাধিক সাব-মডিউল ফাইলের মধ্যে সম্পর্ক এবং তাদের ডিপেনডেন্সি রেজোলভ করতে সক্ষম হয়।
Main ivy.xml
File:
<?xml version="1.0" encoding="UTF-8"?>
<ivy-module version="2.0">
<info organisation="com.example" module="myapp" revision="1.0.0"/>
<dependencies>
<dependency org="org.apache.commons" name="commons-lang3" rev="3.12.0"/>
<dependency org="junit" name="junit" rev="4.13.2"/>
</dependencies>
</ivy-module>
Submodule ivy.xml
File:
<?xml version="1.0" encoding="UTF-8"?>
<ivy-module version="2.0">
<info organisation="com.example" module="myapp-submodule" revision="1.0.0"/>
<dependencies>
<dependency org="org.apache.commons" name="commons-io" rev="2.8.0"/>
</dependencies>
</ivy-module>
এখানে:
ivy.xml
ফাইলে ডিপেনডেন্সি হিসেবে commons-lang3
এবং junit
লাইব্রেরি রয়েছে।ivy.xml
ফাইলে commons-io
লাইব্রেরি অন্তর্ভুক্ত রয়েছে।<project name="myapp" default="resolve">
<taskdef name="ivy" classname="org.apache.ivy.ant.IvyTask"/>
<target name="resolve">
<ivy file="ivy.xml"/>
</target>
</project>
এটি resolve
টাস্ক চলানোর মাধ্যমে ivy.xml
এবং ivy-submodule.xml
ফাইল থেকে ডিপেনডেন্সি রেজোলভ করবে।
Chained Module Descriptors ব্যবহারের মাধ্যমে আপনি একাধিক ivy.xml ফাইলকে একত্রে ব্যবহার করতে পারেন এবং এই প্রক্রিয়ার মাধ্যমে আপনার ডিপেনডেন্সি ম্যানেজমেন্টকে আরও সহজ এবং কার্যকরী করতে পারেন। এটি মূলত একাধিক সাব-মডিউলের মধ্যে সম্পর্ক এবং তাদের ডিপেনডেন্সিগুলির সমন্বয় সাধন করতে সহায়তা করে। Ivy-তে চেইনড মডিউল ডেসক্রিপ্টর ব্যবহার করে আপনি একটি বৃহত্তর এবং জটিল প্রোজেক্টের ডিপেনডেন্সি ম্যানেজমেন্ট সহজ করতে পারবেন।
common.read_more